#ifndef WS2812_DMA_H
#define WS2812_DMA_H

//#include "stm32l0xx_hal.h"
#include "air001xx_hal.h"
#include <stdint.h>

// WS2812时序参数（基于8MHz SPI时钟）
#define WS2812_BIT_0 0xC0     // 表示0的SPI数据模式
#define WS2812_BIT_1 0xF8     // 表示1的SPI数据模式
#define WS2812_RESET_DELAY 50 // 复位所需的最小延迟(微秒)
#define LED_COUNT 76   

// WS2812控制器结构体定义
typedef struct
{
    SPI_HandleTypeDef *hspi;          // SPI句柄指针
    GPIO_TypeDef *data_port;          // 数据引脚端口
    uint16_t data_pin;                // 数据引脚编号
    uint16_t led_count;               // LED数量
    uint8_t brightness;               // 整体亮度(0-255)
    uint32_t *frame_buffer;           // 帧缓冲区，存储每个LED的颜色值(GRB格式)
    uint8_t *dma_buffer;              // DMA传输缓冲区，存储编码后的SPI数据
    uint32_t dma_buffer_size;         // DMA缓冲区大小
    volatile uint8_t is_transmitting; // 传输状态标志
} WS2812_Controller;

// 函数声明
HAL_StatusTypeDef WS2812_Init(WS2812_Controller *controller, SPI_HandleTypeDef *hspi,
                              GPIO_TypeDef *data_port, uint16_t data_pin, uint16_t led_count);
void WS2812_SetPixel(WS2812_Controller *controller, uint16_t index, uint32_t color);
void WS2812_Clear(WS2812_Controller *controller);
void WS2812_Show(WS2812_Controller *controller);
void WS2812_SetBrightness(WS2812_Controller *controller, uint8_t brightness);
uint32_t WS2812_GetPixel(WS2812_Controller *controller, uint16_t index);
uint32_t WS2812_HSVToColor(uint8_t h, uint8_t s, uint8_t v);

#endif // WS2812_DMA_H
